package com.specter.dev.code.execute;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.specter.dev.code.builder.GenConfiguration.ModuleOutput;

import lombok.Data;

/**
 * Note:根据实体对象来生成对应的文件并写到目标地址
 * 
 * @author Liang.Wang
 * @version Mar 23, 2017
 */
public interface ModuleOutputExe {

	/**
	 * 对一个&lt;output/&gt;标签应用所有实体列表进行输出
	 * 
	 * @param output 输出配置
	 * 
	 * @param data   输出对应的数据Map
	 * 
	 */
	public void output(ModuleOutput output, DataModel data);

	/**
	 * 输出时参数对象
	 */
	@Data
	public class DataModel {
		private Map<String, Object> meta;// 模块公共参数；
		private Map<String, Object> file;// 输出文件信息；
		private Map<String, Object> func;// 加载注入方法；
		private Map<String, Object> bean;// 对应实体信息；
		private List<?> inputs;// 待处理实体对象列表;

		public Map<String, Object> toMap() {
			Map<String, Object> map = new HashMap<>();
			map.put("meta", meta);
			map.put("file", file);
			map.put("func", func);
			map.put("bean", bean);
			return map;
		}

		public void file(String key, Object value) {
			file = file == null ? new HashMap<>() : file;
			file.put(key, value);
		}

		public Object file(String key) {
			return file.get(key);
		}

		public Object meta(String key) {
			return meta.get(key);
		}

		public Object bean(String key) {
			return bean.get(key);
		}

		public void func(String key, Object value) {
			func = func == null ? new HashMap<>() : func;
			func.put(key, value);
		}
	}

}
